const fs = require('fs')

let ws = fs.createWriteStream('text-drain.txt', {
  highWaterMark: 3,
})

// 当前缓存区可以再次执行写入的时候, drain 事件就会被触发

let flag = ws.write('1')
console.info('flag', flag)

flag = ws.write('2')
console.info('flag', flag)

// 如果 flag 为 false 并不说明当前数据不能被执行写入
// 这个 flag
flag = ws.write('3')
console.info('flag', flag)

/**
 * 1-第一次调用 write方法时将数据直接写入到文件中
 * 2-第二次开始 write方法就是将数据写入缓存中
 * 3-生产速度和消费速度是不一样的,一般情况下 生产速度要比消费速度快很多
 * 4-当flag为false之后并不意味着当前次的数据不能写入,但是我们应该告知数据的生产者,当前的消费速度已经跟不上生产速度了,
 *  所以这个时候,一般我们会将可读流的模式修改为暂停模式
 * 5-当数据生产者暂停之后,消费者会慢慢的消化它内部缓存中的数据,直到可以再次被执行写入操作
 * 6-当缓存区可以继续写入数据时如何让生产者知道 ===> drain 事件
 */

// 累计写入量没有达到 highWaterMark ==> 不会触发
// 累计写入量达到 highWaterMark ===> 触发 drain 事件
ws.on('drain', () => {
  console.info('drain start')
})
